package domain;

import java.awt.Point;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;

public class Pista {

	private Tablero tablero;
	private boolean hayGanador;
	private final CyclicBarrier barrier;
	
	private Team team1, team2; 
	public Pista(int autosPorTeam){
		team1 = new Team(autosPorTeam, 1, this); // tiene un array con los autos
		team2 = new Team(autosPorTeam, 2, this);
		tablero = new Tablero(15, this);
		barrier = new CyclicBarrier(autosPorTeam*2, new CicloTurnos(3000, this));
		hayGanador = false;
		initPosiciones(autosPorTeam); 
	}
	
	synchronized public void avanzar (Auto auto){
		if (!auto.chocado()){
			Point nextPoss = auto.nextPoss();
			
			//cuando un elemento del tablero es chocado sabe lo que hay que hacer
			if (!tablero.fueraDeTablero(nextPoss)){
				tablero.getCuadrado(nextPoss).hacerMovimiento(auto, tablero);
			}
			else {
				System.out.println("algo se quiso caer del tablero");
			}
		}
		
	}
	
	public void initPosiciones (int cantAutos){
		team1.initAutos(cantAutos, tablero);
		team2.initAutos(cantAutos, tablero);
	}
	public Tablero getTablero(){
		return this.tablero;
	}
	public void listoParaMover(Auto auto){
		try {
			barrier.await();
		} catch (InterruptedException e) {
			e.printStackTrace();
		} catch (BrokenBarrierException e) {
			e.printStackTrace();
		}
	}
	public void empezarJuego(){
		team1.arrancar();
		team2.arrancar();
	}
	public void cambiarDir(int idAuto, int idTeam, Direccion ndir){
		getTeam(idTeam).cambiarDir(idAuto, ndir);
	}

	public Team getTeam(int idTeam) {
		if (idTeam == 1){
			return team1;
		}
		if (idTeam ==2){
			return team2;
		}
		return null;
	}

	public void ganoJuego(Team team) {
		this.hayGanador = true;
		System.out.println("GANO EL JUEGO EL TEAM:" + team.getNumero());
		
	}
	public boolean hayGanador(){
		return this.hayGanador;
	}
	public static void main(String[] arg){
		Pista pista = new Pista(1);
		Auto a = pista.getTeam(1).getAutito(0);
		System.out.println(a.getPosicion() +""+ a.getNumero());
		
		pista.empezarJuego();
	}

	public void repararAutos() {
		team1.repararAutos();
		team2.repararAutos();
		
	}
}
